/*
求一个PC与单片机串口通信的程序，要求如下：
1、如果在电脑上发送以$开始的字符串，则将整个字符串原样返回（字符串长度不是固定的）。
2、如果接收到1，则将P10置高电平，接收到0，P10置低电平。（用来控制一个LED）
单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。谢谢！
问题补充：可能会将【$ABCD,123456,987654ccc,aasdasd,aaaa,sssd,4D】这样的字符串（字符串长度约为50-150个字符）传送给单片机，只能能原样返回。
*/
#include "8052.h"

unsigned char UART_BUFF;
char NEW_REC = 0, SEND_END = 1, Money = 0;
//----------------------------------------------
void send_receive(void)
{
    SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
    TMOD = 0x20; //T1方式2
    TH1 = 0xFD;  //9600bps@11.0592MHz
    TL1 = 0xFD;
    TR1 = 1;
    ES = 1; //开中断.
    EA = 1;
    while (Money == 0)
        ; //等着交费，呵呵，等着接收$.
    while (1)
    {
        if ((NEW_REC == 1) && (SEND_END == 1))
        {                     //如果收到新数据及发送完毕
            SBUF = UART_BUFF; //那就发送.
            NEW_REC = 0;
            SEND_END = 0;
        }
    }
}
//----------------------------------------------
void ser_int(void) __interrupt 4
{
    if (RI == 1)
    {           //如果收到.
        RI = 0; //清除标志.
        NEW_REC = 1;
        UART_BUFF = SBUF; //接收.
        if (UART_BUFF == '1')
            P1_0 = 1; //led显示
        if (UART_BUFF == '0')
            P1_0 = 0; //led显示
        if (UART_BUFF == '$')
            Money = 1;
    }
    else
    {           //如果送毕.
        TI = 0; //清除标志.
        SEND_END = 1;
    }
}